<?php

/**
 * usuarios actions.
 *
 * @package    toyomotor
 * @subpackage usuarios
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class usuariosActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->usuarios = Doctrine_Core::getTable('Usuario')
      ->createQuery('a')
      ->execute();
  }

  public function executeShow(sfWebRequest $request)
  {
    $this->usuario = Doctrine_Core::getTable('Usuario')->find(array($request->getParameter('id_usuario')));
    $this->forward404Unless($this->usuario);
  }

  public function executeNew(sfWebRequest $request)
  {
    $this->form = new UsuarioForm();
  }

  public function executeRegistro(sfWebRequest $request)
  {
    if ($this->getUser()->isAuthenticated()) :
      $this->redirect('default/secure');
    endif;

    $this->form = new UsuarioForm();
    $this->form->agregarcamposcodigo();
  }

  public function executeMicuenta(sfWebRequest $request)
  {
    $this->forward404Unless($usuario = Doctrine_Core::getTable('Usuario')->find(array($this->getUser()->getAttribute('id_usuario'))), sprintf('Object usuario does not exist (%s).', $request->getParameter('id_usuario')));

    $this->form = new UsuarioForm($usuario);
    $this->form->agregarcamposcodigo();
    $this->form->recuperarcodigo($usuario);
  }

  public function executeLogin(sfWebRequest $request)
  {
    $this->email = $this->request->getParameter('email');
    $this->password = md5($this->request->getParameter('password'));
    $this->usuarios = Doctrine_Core::getTable('Usuario')->createQuery('u')
                        ->where('u.email = ?', $this->email)
                        ->andWhere('u.password = ?', $this->password);

    $this->query = $this->usuarios->fetchOne();
    $credential = "";
    
    

    if ($this->query) {
      switch ($this->query->getPerfil())
      {
	case "1":
            $credential = "Admin";
            //Cambiar direcciones cuando sean necesarias pruebas
            //$web = 'http://localhost:9094/administrador.php/citaadmin';
            $web = 'http://www.toyomotor.com/administrador.php/citaadmin';
            break;
	case "2":
            $credential = "Asesor";
            //$web = 'http://localhost:9094/administrador.php/citaadmin';
            $web = 'http://www.toyomotor.com/administrador.php/citaadmin';
            break;
        case "3":
            $credential = "Usuario";
            $web = $this->request->getParameter('web');
            break;
	default:
            $this->forward('default', 'malosdatos');
            break;
      }
    } else {
      $this->forward('default', 'malosdatos');
    }

    $this->getUser()->setAuthenticated(true);
    $this->getUser()->addCredential($credential);
    $this->getUser()->setAttribute('nombre', $this->query->getNombre());
    $this->getUser()->setAttribute('id_usuario',$this->query->getIdUsuario());

    $this->redirect($web);
  }

  public function executeLogout()
  {
    $this->getUser()->setAuthenticated(false);

    $this->getUser()->clearCredentials();

    if ($this->getUser()->hasCredential('Usuario')) $this->getUser()->getAttributeHolder()->removeNamespace('Usuario');

    if ($this->getUser()->hasCredential('Asesor')) $this->getUser()->getAttributeHolder()->removeNamespace('Asesor');

    if ($this->getUser()->hasCredential('Admin')) $this->getUser()->getAttributeHolder()->removeNamespace('Admin');

    $this->getUser()->getAttributeHolder()->remove('id_usuario');
    $this->getUser()->getAttributeHolder()->remove('nombre');

    $this->getUser()->shutdown();

    $this->redirect('@homepage');
  }

  public function executeContrasena()
  {
    if ($this->getUser()->isAuthenticated()) $this->redirect('@homepage');
  }

  public function executeSaveclave(sfWebRequest $request)
  {
    if ($this->getUser()->isAuthenticated()) $this->redirect('@homepage');

    $this->forward404Unless($request->isMethod('post'));

    $this->usuario = new Usuario();

    $clavenueva = $this->usuario->cambiarClave($request->getParameter('email'));

    if ($clavenueva)
    {
      //Create the Transport
      $transport = Swift_SmtpTransport::newInstance('ssl://smtp.gmail.com', 465)
  			->setUsername('toyomotorenvios@gmail.com')
  			->setPassword('QOIzYaaab');

      $sub = 'Cambio de Contraseña';
      $from = 'AUTOMOTRIZ TOYOMOTOR';

      $mailer = Swift_Mailer::newInstance($transport);

      $message = Swift_Message::newInstance()

        ->setCharset('utf-8')

	//Give the message a subject
	->setSubject($sub)

	//Set the From address with an associative array
	->setFrom(array('toyomotorenvios@gmail.com' => $from))

	//Set the To addresses with an associative array
	->setTo(array($request->getParameter('email')))

	//Give it a body
	->setBody('Tu nueva contrase&ntilde;a es: '.$clavenueva.'<br/><br/>
		Puedes cambiarla en la secci&oacute;n Mis Datos. <br/> <br/>
		Saludos, <br/> Toyo Motor <br/> <br/>
		NOTA: Por favor, no respondas a este email. Si deseas comunicarte con nosotros haz <a href="http://www.toyomotor.com/contenido/contacto">clic aqu&iacute;</a>', 'text/html');

	//Send the message
	$result = $mailer->send($message);

	$this->forward('default', 'cambiovalido');
      } else {
	$this->forward('default', 'noemail');
      }
  }

  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new UsuarioForm();
    $this->form->agregarcamposcodigo();

    $this->processFormu($request, $this->form);

    if (!($this->getUser()->isAuthenticated())) $this->setTemplate('registro');

    if ($this->getUser()->hasCredential('Admin')) $this->setTemplate('new');

  }

  public function executeEdit(sfWebRequest $request)
  {
    $this->forward404Unless($usuario = Doctrine_Core::getTable('Usuario')->find(array($request->getParameter('id_usuario'))), sprintf('Object usuario does not exist (%s).', $request->getParameter('id_usuario')));
    $this->form = new UsuarioForm($usuario);
  }

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($usuario = Doctrine_Core::getTable('Usuario')->find(array($request->getParameter('id_usuario'))), sprintf('Object usuario does not exist (%s).', $request->getParameter('id_usuario')));
    $this->form = new UsuarioForm($usuario);
    $this->form->agregarcamposcodigo();
    $this->form->recuperarcodigo($usuario);

    $this->processFormu($request, $this->form);

    $this->setTemplate('micuenta');
    /*Codigo modificado para que redireccione al mismo template del inicio*/
    //$this->setTemplate('micuenta');
  }

  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($usuario = Doctrine_Core::getTable('Usuario')->find(array($request->getParameter('id_usuario'))), sprintf('Object usuario does not exist (%s).', $request->getParameter('id_usuario')));
    $usuario->delete();

    $this->redirect('usuarios/index');
  }

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $usuario = $form->save();

      if (!($this->getUser()->isAuthenticated())){
          $this->getUser()->setAuthenticated(true);
          $this->getUser()->addCredential("Usuario");
          $this->getUser()->setAttribute('nombre', $usuario->getNombre());
          $this->getUser()->setAttribute('id_usuario',$usuario->getIdUsuario());
          $this->redirect('default/registroExitoso');
          
      }

      //@TODO No acabo de estar seguro de la funcionalidad este if, parece no tener sentido
      if ($request->getParameter('registro'))
      {
	  $this->getUser()->setAttribute('nombre', $usuario->getNombre());
	  $this->redirect('usuarios/micuenta?id_usuario='.$usuario->getIdUsuario());
      }

      //$this->redirect('usuarios/index');
    }
  }
  
    protected function processFormu(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $arreglo = $request->getParameter('usuario');
      $usuario = $form->save();
      $usuario->setTelefono1($arreglo['codigot'].''.$arreglo['telefono1']);
      $usuario->setCelular1($arreglo['codigoc'].''.$arreglo['celular1']);
      //Agregado para corregir un problema con el codigo que venia desde que se tomo el proyecto
      $usuario->setPassword(md5($arreglo['password']));
      $usuario->save();

      if (!($this->getUser()->isAuthenticated())){
          $this->getUser()->setAuthenticated(true);
          $this->getUser()->addCredential("Usuario");
          $this->getUser()->setAttribute('nombre', $usuario->getNombre());
          $this->getUser()->setAttribute('id_usuario',$usuario->getIdUsuario());
          $this->redirect('default/registroExitoso');
          
      }

      //este if deberia ser para el usuario que esta actualizando sus datos
      if ($request->getParameter('registro'))
      {
	  //$this->getUser()->setAttribute('nombre', $usuario->getNombre());
          $usuario->setPassword(md5($arreglo['password']));
          $usuario->save();
	  $this->redirect('@misdatos?id_usuario='.$usuario->getIdUsuario());
          
      }

      //$this->redirect('usuarios/index');
    }
  }
}
